const Promise = require("./then");

let p1 = new Promise((resolve, reject) => {
    resolve("p1");
});

/* let p2 = new Promise((resolve,reject) => {
    resolve(222);
}) */

p1.then(res => {
    console.log('p1-success');
    console.log(res);
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("p2");
        }, 3000);
    }).then(res => {
        console.log('p2-success');
        console.log(res);
        return 100;
    }, err => {
        console.log('p2-failed');
    });
}, err => {
    console.log('p1-failed');
}).then(res => {
    console.log('成功');
    console.log(res);
}, err => {
    console.log('失败');
}).then(res => {
    console.log(res);
}, err => {
    console.log('err');
});

/*
打印结果：
p1-success
p1
p2-success
p2
成功
100
undefined
*/



/* let fs = require("fs");

function read(url){
    return new Promise((resolve,reject) => {
        fs.readFile(url,"utf-8",function(err,data){
            if(err){
                reject(err);
                return
            }
            resolve(data);
        });
    })
}

read("./name.txt").then(res => {
    return data+1;
},err => {

}).then(res => {
    return data+1;
},err => {

}).then(res => {
    return data+1;
},err => {

}); */


/*
promise有哪些优缺点？
优点：可以解决异步嵌套的问题；可以解决多个异步并发问题；
缺点：内部核心还是基于回调的；无法终止异步；

1、里面有三个状态，等待态、成功态、失败态，一旦成功或失败，状态改变，并且状态不可更改不可逆；resolve代表执行成功程序，reject代表执行失败程序。

2、每个promise实例都有一个then方法。

3、如果new Promise的实例报错了，会变成失败态（抛错也算失败）。

终极方案：async + await
 */